<?php

//  http://www.localhost.com/img_scale/?url=https%3a%2f%2ftest.charrobot.com%2ffile_upload%2ffiles%2ficon.jpg&width=20&height=20

$md5 = md5(json_encode($_GET));
$width = $_GET['width']??null;
$height = $_GET['height']??null;
$url = $_GET['url']??null;
if(!$url){
    die;
}

$ext = getFileSuffix($url);

mkdirs("img/");

$savePath = 'img/'.$md5.'.'.$ext;

//dirname(__FILE__).'/'.
if(!file_exists($savePath)){
    $urlNew =scaleImg($url,$savePath, $width, $height);
}else{
    $urlNew =$savePath;
}



Header("HTTP/1.1 303 See Other");
Header("Location: {$urlNew}");
exit; 


//文件前缀为年月，文件名为md5.后缀名


    /**
     * 获取文件后缀名
     * @param string $str
     */
    function getFileSuffix($str)
    {
        //获取最后一级的文件名
        $pos = strrpos($str, '/');
        if ($pos !== false) {
            $str = substr($str, $pos + 1);
        }
        //获取最后一个.后面的内容
        $pos = strrpos($str, '.');
        if ($pos === false) {
            return false;
        }
        $str = substr($str, $pos + 1);
        //获取第一个?前面的内容
        $pos = strpos($str, '?');
        if ($pos === false) {
            return $str;
        }
        $str = substr($str, 0, $pos);
        return $str;
    }



 /**
     * 下载文件方法
     * @param string $src_old 原图片地址(可以是网址，也可以是base64格式，也可以是本地路径)
     */
     function httpcopy($url, $file_dir,$file_name_noext, $ext='', $timeout=1200) {//下载文件的代码
     
     
       $file = $file_dir.$file_name_noext;
        $file = empty($file) ? pathinfo($url,PATHINFO_BASENAME) : $file;
            $file = $file.'.'.$ext;
        $dir = pathinfo($file,PATHINFO_DIRNAME);
        !is_dir($dir) && @mkdir($dir,0755,true);
        $url = str_replace(" ","%20",$url);
     
        if(function_exists('exec')) {
            wget($url,$file);
            return $file;
        }else{
            
            
      
        
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);// 设置超时限制防止死循环
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // 获取的信息以文件流的形式返回
            curl_setopt($ch, CURLOPT_HEADER, 0);// 显示返回的Header区域内容

            if(stripos($url, 'baidu.com')!==false){//网址包含百度，则增加引用来源为百度才能抓取
                curl_setopt($ch, CURLOPT_REFERER, 'http://www.baidu.com');
            }else{
                curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
            }

            curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// 从证书中检查SSL加密算法是否存在
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 对认证证书来源的检查
            //curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
            //curl_setopt($ch, CURLOPT_POST, 1); // 发送一个常规的Post请求
            //curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // Post提交的数据包


            $fp =  fopen($file, 'w+');
            curl_setopt($ch, CURLOPT_FILE, $fp);
            curl_exec ($ch);
            echo curl_error($ch);
            curl_close ($ch);
            fclose($fp);
            return $file;
            
        }
     
            
        
    }
    
    function wget($url,$file){
    $msgArr = [];
    $shell = "wget {$url} -O {$file}";
    //$shell = "ls -la";
    exec($shell, $result, $status);
    $shell = "<font color='red'>$shell</font>";
    $msgArr[]= "<pre>";
    if( $status ){
        $msgArr[]= "shell命令{$shell}执行失败";
    } else {
        $msgArr[]= "shell命令{$shell}成功执行, 结果如下<hr>";
        $msgArr[]= $result ;
    }
    $msgArr[]= "</pre>";
    print_r($msgArr);
    return $msgArr;
}

/**
      *等比例缩放函数（以保存新图片的方式实现）
     * @param string $picName 被缩放的处理图片源
     * @param string $savePath 保存路径
     * @param int $maxx 缩放后图片的最大宽度
     * @param int $maxy 缩放后图片的最大高度
     * @param string $pre 缩放后图片的前缀名
     * @return $string 返回后的图片名称（） 如a.jpg->s.jpg
      *
      **/
     function scaleImg($picName,$savePath, $maxx = 800, $maxy = 450)
     {
         $info = getimageSize($picName);//获取图片的基本信息
        $w = $info[0];//获取宽度
        $h = $info[1];//获取高度 
        //print_r($info);die;

        if($w<=$maxx&&$h<=$maxy){
             return $picName;
         }
         //获取图片的类型并为此创建对应图片资源
        switch ($info[2]) {
             case 1://gif
                 $im = imagecreatefromgif($picName);
                 break;
             case 2://jpg
                 $im = imagecreatefromjpeg($picName);
                 break;
             case 3://png
                 $im = imagecreatefrompng($picName);
                 break;
             default:
             print_r($info);
                 die("图像类型错误");
         }
         //计算缩放比例
        if (($maxx / $w) > ($maxy / $h)) {
             $b = $maxy / $h;
         } else {
             $b = $maxx / $w;
         }
         //计算出缩放后的尺寸
        $nw = floor($w * $b);
         $nh = floor($h * $b);
         //创建一个新的图像源（目标图像）
        $nim = imagecreatetruecolor($nw, $nh); 

        //透明背景变黑处理
        //2.上色
        $color=imagecolorallocate($nim,255,255,255);
         //3.设置透明
        imagecolortransparent($nim,$color);
         imagefill($nim,0,0,$color); 


         //执行等比缩放
        imagecopyresampled($nim, $im, 0, 0, 0, 0, $nw, $nh, $w, $h);
         //输出图像（根据源图像的类型，输出为对应的类型）
        $picInfo = pathinfo($picName);//解析源图像的名字和路径信息
        //$savePath = $savePath. "/" .date("Ymd")."/".$this->pre . $picInfo["basename"];
         switch ($info[2]) {
             case 1:
                 imagegif($nim,$savePath);
                 break;
             case 2:
                 imagejpeg($nim,$savePath);
                 break;
             case 3:
                 imagepng($nim,$savePath);
                 break; 

        }
         //释放图片资源
        imagedestroy($im);
         imagedestroy($nim);
         
         //返回结果
        return $savePath;
     } 

function mkdirs($dir, $mode = 0777)
 {
     if (is_dir($dir) || @mkdir($dir, $mode)) return TRUE;
     if (!mkdirs(dirname($dir), $mode)) return FALSE;
     return @mkdir($dir, $mode);
 } 


